/**
 * Created by zhangqi on 2015/12/11.
 * require.async("commonStaticDirectory/plugins/fromula/fromula.js",function(Fromula){
                   new Fromula();
               });
 *
 *@options.calNumbers
 *@options.ruleId
 *@options.type
 */
define(function(require,exports,module) {
    //弹窗组件
    require("commonStaticDirectory/plugins/artDialog/ui-dialog.css");
    require("commonStaticDirectory/plugins/artDialog/dialog-plus");

    require("commonStaticDirectory/plugins/jqGrid/css/ui.jqgrid.css"); //表格核心组件样式
    require("commonStaticDirectory/plugins/jqGrid/jquery.jqGrid.src.js"); //表格核心组件
    require("commonStaticDirectory/plugins/jqGrid/grid.locale-cn.js"); //表格语言包
    require("commonStaticDirectory/plugins/jqGrid/jquery.jqGrid.backboard.js"); //隐藏列插件

    //加载loading组件
    require("commonStaticDirectory/plugins/jquery.loading.js");
    var Ajax = require("commonStaticDirectory/plugins/ajax");
    require("commonStaticDirectory/plugins/fromula/fromula.css");

    var Fromula = function () {
        this.init.apply(this, arguments);
    };
    Fromula.prototype = {
        constructor: Fromula,
        options: {},
        init: function (options) {
            this.options = $.extend({},this.options,options);
            if(!this.options.calNumbers || !this.options.ruleId || !this.options.type){
                layer.msg("缺少必要参数，请联系管理员", {offset: 0,shift:6});
                return false;
            }
            this.initDialog();
            this.getTableColumn();
        }
        /**
         * 创建html骨架弹窗
         * */
        ,initDialog:function(){
            var t = this;
            var sHtml = '<div id="base_fromula_wrap">' +
                    '        <div id="base_fromula_jqgrid_wrap" class="myjqgrid_wrap">'+
                    '            <div id="base_fromula_pager"></div>'+
                    '            <table id="base_fromula_list"></table>'+
                    '        </div>' +
                '            <div class="base_fromula_jqgrid_buttons">' +
                '               <input type="button" class="flat-button flat-yellow add" value="新增"/> ' +
                '               <div class="base_fromula_jqgrid_more_buttons">' +
                '                   更多 ' +
                '                   <i class="iconfont_dayhr_base">&#xe600;</i> ' +
                '                   <ul class="base_fromula_jqgrid_more_wrap">' +
                '                        <li><a class="edit" href="javascript:void(0);">修改</a></li>' +
                '                        <li><a class="delete" href="javascript:void(0);">删除</a></li>' +
                '                   </ul>' +
                '               </div>' +
                '            </div>' +
                '        </div>';
            //弹窗
            t.dialog = dialog({
                title:"公式管理"
                ,content:sHtml
            }).showModal();
        }
        /**
         * 获取表头数据
         * */
        ,getTableColumn:function(){
            var t = this;
            Ajax.ApiTools().getTableColumn({
                infoSetId:"formula_list"
                ,data:{
                    "infoSetId":"formula_list"
                    ,customParam:{
                        rule_id: t.options.ruleId
                        ,type: t.options.type
                    }
                }
                ,success:function(data){
                    t.initTable(data);
                }
            });
        }
        /**
         * 初始化表格
         * */
        ,initTable:function(data){
            var t= this;
            var aFormData = []; //表单包含的字段
            var aFormDataForEdit = []; //表单包含的字段(编辑)
            var aColNames = ["索引ID"]; //表头名称数组
            var aColModels =[{name:"_indexId",width:1,isListShow:false}]; //表头数据数组

            //如果有列头数据
            if(data.columnEdit.length){
                for(var i=0;i<data.columnEdit.length;i++){
                    var item = data.columnEdit[i];
                    var colObj = {
                        name:item.name //字段名
                        ,index:item.name //排序索引
                        ,align:item.alignX //显示位置
                        ,width:item.width //宽度
                        ,isListShow:item.isListShow //是否列表显示
                        ,sortable:!!item.isSortable //是否可排序
                    };


                    //只有isHidden为false的时候才在表头中显示
                    if(!item.isHidden){
                        aColNames.push(item.title);
                        aColModels.push(colObj);
                    }
                    if(item.isEditShow){
                        aFormData.push({
                            name:item.name
                            ,label:item.title
                            ,isEdit:item.isParentField?false:true //如果是父表字段就禁用修改
                            ,type:item.cellType || "text" //用于判断是什么类型的表单，默认为文本框
                            ,keyValueBean:item.keyValueBean  //用来判断该字段的表单项是否是异步获取数据做下拉菜单用
                            ,isParentField:item.isParentField //是否是父表字段，非autoForm必传
                            ,isEditDefaultKey:item.isEditDefaultKey  //是否是默认编辑字段，如果是的话，用户设置导航的选中值
                            ,isMust:item.isMust //是否必填样式
                            ,maxlength:item.fieldSize //显示文本框的长度
                            ,value:item.defaultAddVal || ""
                        });
                        aFormDataForEdit.push({
                            name:item.name
                            ,label:item.title
                            ,isEdit:item.isParentField?false:true //如果是父表字段就禁用修改
                            ,type:item.cellType || "text" //用于判断是什么类型的表单，默认为文本框
                            ,keyValueBean:item.keyValueBean  //用来判断该字段的表单项是否是异步获取数据做下拉菜单用
                            ,isParentField:item.isParentField //是否是父表字段，非autoForm必传
                            ,isEditDefaultKey:item.isEditDefaultKey  //是否是默认编辑字段，如果是的话，用户设置导航的选中值
                            ,isMust:item.isMust //是否必填样式
                            ,maxlength:item.fieldSize //显示文本框的长度
                            ,value:item.defaultAddVal || ""
                        });
                        t.aFormData = aFormData;
                        t.aFormDataForEdit = aFormDataForEdit;
                    }
                }
            }

            //初始化核心表格
            var sTableId = t.sTableId = "base_fromula_list"; //表格的id
            t.jqGrid = $("#" + sTableId).jqGrid({
                url: gMain.basePath+"route/formula_list/getAll.do"
                , datatype: "json"
                , colNames:aColNames
                , colModel:aColModels
                , autowidth:true
                , height: 500
                , rowNum: 20
                , rowList: [10, 20, 30,40,50,100]
                , pager: '#base_fromula_pager'
                , mtype: "post"
                , viewrecords: true //定义是否要显示总记录数
                , multiboxonly:false //只有当multiselect = true.起作用，当multiboxonly 为ture时只有选择checkbox才会起到多选的作用
                , rownumbers:true
                , rownumWidth:50
                , multiselect:true
                , multiselectWidth:35
                //, shrinkToFit:isFixation?false:true //是否使用固定宽度，为false表示使用固定宽度
                , postData: t.markGetAllPostData()
                //双击表格事件
                , ondblClickRow:function(rowid,iRow,iCol,e){
                    var oItem =  $("#"+sTableId).jqGrid("getRowData",iRow);
                    oItem.iRowIndex = iRow;

                    //塞入值
                    if(t.aFormDataForEdit.length){
                        for(var i=0;i<t.aFormDataForEdit.length;i++){
                            t.aFormDataForEdit[i].value = oItem[t.aFormDataForEdit[i].name];
                            if(t.aFormDataForEdit[i].name == "type"){
                                t.aFormDataForEdit[i].isEdit = false; //公式分组不可编辑
                            }
                        }
                    }
                    $("#base_fromula_wrap").loading();
                    require.async("commonStaticDirectory/plugins/fromula/dialogFromulaEdit.js",function(DialogFromulaEdit){
                        $("#base_fromula_wrap").loading({state:false});
                        new DialogFromulaEdit({
                            aFormData: t.aFormDataForEdit
                            ,infoSetId: "formula_list"
                            ,oTableList:t
                            ,saveType:"edit"
                            ,data:{
                                getinfoitem:{"calNumbers": t.options.calNumbers,"calNames":t.options.calNames,"type": t.options.type}
                                ,insert:{rule_id: t.options.ruleId}
                            }
                            ,uuid:oItem['uuid']
                            ,isEdit:(typeof sDdh !== "undefined" && sDdh === "100000008")?true:false //超管可编辑
                        });
                    });
                }
                //数据加载完成
                ,loadComplete:function(){
                }
            });

            //隐藏列的插件
            $("#base_fromula_wrap").jqGridBackboard({
                sTableId:sTableId
                ,aColModels:aColModels
                ,aColNames:aColNames
            });

            //表格一些方法的封装
            t.mmg = {
                //重载表格数据
                load:function(){
                    $("#"+ t.sTableId).jqGrid("setGridParam",{postData: t.markGetAllPostData()});
                    $("#"+ t.sTableId).trigger("reloadGrid");
                }
                //获取一条选中的数据
                ,row:function(iRowIndex){
                    var oItem =  $("#"+t.sTableId).jqGrid("getRowData",iRowIndex);
                    return oItem;
                }
                //获取所有选中的数据的数组
                ,selectedRows:function(){
                    var aIds=$("#"+t.sTableId).jqGrid("getGridParam","selarrrow");
                    var aRows = [];
                    for(var i=0;i<aIds.length;i++){
                        aRows.push($("#"+t.sTableId).jqGrid("getRowData",aIds[i]));
                    }
                    return aRows;
                }
                //获取所有选中的数据的索引的数组
                ,selectedRowsIndex:function(){
                    var aIds=$("#"+t.sTableId).jqGrid("getGridParam","selarrrow");
                    return aIds;
                }
            };

            t.bindEvent();
        }
        /**
         * 请求表格数据拼装
         * */
        ,markGetAllPostData:function(){
            var t = this;
            var _obj = {
                infoSetId:"formula_list"
                ,customParam:{
                    rule_id: t.options.ruleId
                    ,type:t.options.type
                }
            };
            return _obj;
        }
        /**
         * 弹窗初始化之后绑定事件
         * */
        ,bindEvent:function(){
            var t = this;
            //新增按钮点击
            $("#base_fromula_wrap").on("click",".add",function(){
                $("#base_fromula_wrap").loading();
                require.async("commonStaticDirectory/plugins/fromula/dialogFromulaEdit.js",function(DialogFromulaEdit){
                    new DialogFromulaEdit({
                        aFormData: t.aFormData
                        ,infoSetId: "formula_list"
                        ,oTableList:t
                        ,saveType:"add"
                        ,data:{
                            getinfoitem:{"calNames":t.options.calNames,"calNumbers": t.options.calNumbers,"type": t.options.type}
                            ,insert:{rule_id: t.options.ruleId}
                        }
                        ,isEdit:(typeof sDdh !== "undefined" && sDdh === "100000008")?true:false  //超管可编辑
                    });
                    $("#base_fromula_wrap").loading({state:false});
                });
            });

            //编辑
            $("#base_fromula_wrap").on("click",".edit",function(){
                var aRows = t.mmg.selectedRows(); //选中的数据
                if(aRows.length==1){
                    var iRowIndex = t.mmg.selectedRowsIndex(); //返回选择行索引的数组。
                    aRows[0].iRowIndex = iRowIndex[0];
                    //塞入值
                    if(t.aFormDataForEdit.length){
                        for(var i=0;i<t.aFormDataForEdit.length;i++){
                            t.aFormDataForEdit[i].value = aRows[0][t.aFormDataForEdit[i].name];
                            if(t.aFormDataForEdit[i].name == "type"){
                                t.aFormDataForEdit[i].isEdit = false; //公式分组不可编辑
                            }
                        }
                    }
                    $("#base_fromula_wrap").loading();
                    require.async("commonStaticDirectory/plugins/fromula/dialogFromulaEdit.js",function(DialogFromulaEdit){
                        $("#base_fromula_wrap").loading({state:false});
                        new DialogFromulaEdit({
                            aFormData: t.aFormDataForEdit
                            ,infoSetId: "formula_list"
                            ,oTableList:t
                            ,saveType:"edit"
                            ,data:{
                                getinfoitem:{"calNumbers": t.options.calNumbers,"type": t.options.type}
                                ,insert:{rule_id: t.options.ruleId}
                            }
                            ,uuid:aRows[0]['uuid']
                            ,isEdit:(typeof sDdh !== "undefined" && sDdh === "100000008")?true:false //超管可编辑
                        });
                    });

                }else{
                    layer.msg("请选择一条需要修改的数据", {offset: 0,shift:6});
                    return false;
                }
            });

            //删除
            $("#base_fromula_wrap").on("click",".delete",function(){
                var aSelect = t.mmg.selectedRows();
                if(aSelect.length && aSelect[0]){
                    layer.confirm('请确定是要删除选中的<strong style="color: #00a2e5;font-weight: bold;">'+aSelect.length+'</strong>条数据吗？', {icon: 3, title:'提示'}, function(index){
                        var aSendData = {infoSetId:"formula_list",uuidLists:[]};

                        var aSelectdData = t.mmg.selectedRows();
                        if(aSelectdData.length){
                            for(var i=0;i<aSelectdData.length;i++){
                                aSendData.uuidLists.push(aSelectdData[i].uuid);
                            }
                        }

                        Ajax.ApiTools().del({
                            infoSetId: "formula_list",
                            data:aSendData,
                            success:function(data){
                                if(data.result == "true"){
                                    layer.msg("删除成功", {offset: 0});
                                    t.mmg.load();
                                }
                            }
                        });

                        layer.close(index);
                    });
                }else{
                    layer.msg("请先选择需要删除的数据", {offset: 0,shift:6});
                    return false;
                }
            });

        }

    }

    module.exports = Fromula;

});
